//const ulti = require('../../utils/util')
const app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    hideBody: false,  //界面隐藏

    // 当前显示的设备
    device: {},

    switchButtonDisable : false, // 开关按钮禁用
    switchButtonLoading : false, // 开关按钮loading动画
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 将面页句柄保存到全局变量
    app.globals.pages['session'] = this

    var eventChannel = this.getOpenerEventChannel()
    var page = this

    // 监听acceptData事件，获取上一页面通过eventChannel传送到当前页面的数据

    // 设备信息
    eventChannel.on('rxDevice', function (device) {
      // 当前设备和即将显示的设备不复合时，隐藏面页，等待服务器返回最新数据
      page.setData({
        hideBody: page.data.device != device
      })
      page.data.device = device
      wx.setNavigationBarTitle({
        title: device.name || ''
      })
      //console.log('rxDevice拉取数据')
      page.fetchDeviceData()
      //console.log("受到消息面页")
     // console.log(device)
    })

    //console.log("session-load")
  },

  onUnload: function(){
    // 将面页句柄保存到全局变量
    app.globals.pages['session'] = undefined
    //console.log("session-unload")
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    console.log("session-show")
    if(this.data.device.deviceId){
      // 拉取数据
      //console.log('onShow拉取数据')
    this.fetchDeviceData()
    }
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
  },
  /**
   * 渲染主体信息
   * @param {object | undefined} device 
   */
  render:function(device){
    this.setData({
      device: device || this.data.device
    })
  },

  /**
   * 向服务器拉取设备数据
   * @param {object | undefined} device 指定设备
   * @param {boolean} isPulldowmRefresh 显示刷新动画
   */
  fetchDeviceData: function (device, isPulldowmRefresh) {
    if(this.isFetchingData){
      return
    }
    // 正在拉取数据
    this.isFetchingData = true

    var device = device || this.data.device
    var page = this
    wx.showNavigationBarLoading(); 
    var deviceId = device.deviceId; // 当前设备号
    wx.request({
      method: 'POST',
      url: app.globals.host + 'DeviceData', // 设备信息
      data: {
        id: 17121899,
        deviceId: deviceId
      },
      header: {
        "content-type": "application/x-www-form-urlencoded;charset=utf-8"
      },
      success(res) {
        var data = res.data
        if (data.suc) {
          var device = page.data.device
          if (device.deviceId != deviceId) {
            // 数据不匹配
            return
          }
          // 格式化 属性图标数据
          if(data.detail){
            let detail = data.detail
            for (var k in detail){
              if(detail[k].art){
                detail[k].src = app.globals.host + 'images/device/attr/' + detail[k].art
              }
            }
          }
          // 复制返回数据
          for (var k in data) {
            page.data.device[k] = data[k]
          }
          

          // 渲染主题信息
          page.render()
          // 显示面页数据
          page.setData({
            hideBody: false,
          })
        }
      },
      fail: function (res) {
        console.log(res)
        wx.showToast({ // 显示Toast
          title: '拉取信息失败',
          icon: 'none',
          duration: 3000,
          mask: false

        })
      },
      complete: function () {
        wx.hideNavigationBarLoading(); 
        if(isPulldowmRefresh){
          wx.stopPullDownRefresh()
        }
        page.isFetchingData = false
      }
    })
  },

  /**
   * 下拉刷新回调
   */
  onPullDownRefresh: function () 
  {
    this.fetchDeviceData(undefined, true)
  },

  /**
   * 显示请求特效
   * 启用/禁用 按钮,按钮通话,超时计时器
   * @param {boolean} show 
   */
  showRequestEffect(show){
    if(show == undefined){
      show = true
    }
    this.setData({
      switchButtonDisable: show,
      switchButtonLoading : show, 
    })
    // 超时计时器
    if(! show && this.switchButtonRequestTimer){
      clearTimeout(this.switchButtonRequestTimer)
      this.switchButtonRequestTimer = undefined
    }
  },

  /**
   * 触摸 启动/关闭 按钮回调
   * @param {object} event 
   */
  onTouchSwitchButton:function(){
      this.showRequestEffect(true)
      var page = this
      var deviceId = page.data.device.deviceId

      //更新设备列表信息
      const MSG = function(msg, icon){
        wx.showToast({ 
          title: msg,
          icon: icon || 'none',
          duration: 2000,
        })
      }
      wx.request({
        method: 'POST',
        url: app.globals.host + 'SwitchDevice',
        data: {
          id: 17121899,
          deviceId: deviceId
        },
        header: {
          "content-type": "application/x-www-form-urlencoded;charset=utf-8"
        },
        success(res) {
          var data = res.data
          //console.log(res)
          if (!data.suc) {
            MSG(data.msg || '发生了内部错误')
            this.showRequestEffect(false)
          }
        },
        fail: function (res) {
          console.log(res)
          MSG('请求失败')
          this.showRequestEffect(false)
        },
      })

      // 超时计时器
      var page = this
      this.switchButtonRequestTimer = setTimeout(function(){
        page.showRequestEffect(false)
        wx.showToast({ 
          title: "设备没有回应",
          icon: 'none',
          duration: 2000,
        })
      }, 6000)
  },

  /**
   * 设备状态改变
   * @param {object} device 
   */
  onSwitch: function(device){
    for(var i in device){
      this.data.device[i] = device[i];
    }
    this.render()
    if(device.online == false){
      // 设备下线
      wx.showToast({ 
        title: "设备已经下线",
        icon: 'none',
        duration: 2000,
      })
      wx.navigateBack()
    }
    if(typeof(device.power) != 'undefined'){
      if(device.power){
        this.fetchDeviceData()
      }
      // 如果按钮正在请求电源转换,则完成它
      if(this.data.switchButtonDisable){
        this.showRequestEffect(false)
      }
    }
  },

  /**
   * 接受到shocket消息 
   * 由app实例的WebsocketTask 分发事件
   * @param {object} device 
   */
  onSocketMessage:function(device){
    //console.log(device)
    if(device.deviceId != this.data.device.deviceId){
      return
    }
    if(!device.detail || typeof(device.detail) != 'object'){
      return
    }
    var localDevice = this.data.device
    for(var i in device.detail){
      var attrId = device.detail[i].id  // 属性ID
      for(var j in localDevice.detail){
        if(localDevice.detail[j].id == attrId){
          localDevice.detail[j].value = device.detail[i].value
          break
        }
      }
    }
    this.render()
  },

  /**
   * image 标签加载出错回调
   * @param {object} e 
   */
  onImageTagError:function(e){
    console.log(e)
    var target = e.currentTarget;
    var index = target.dataset.index
    if(index == undefined){
      return
    }
    console.log(index)
    try{
      this.data.device.detail[index].src = undefined;
    }
    catch (e){
      console.log(e)
    }
    this.setData({
      device: this.data.device
    })
    
  }

})